//在 TypeScript 中，我们使用接口（Interfaces）来定义对象的类型。
// 什么是接口？
//  1:在面向对象语言中，接口（Interfaces）是一个很重要的概念，
//  2:它是对行为的抽象，而具体如何行动需要由类（classes）去实现（implement），
interface Person{
    name: string,
    age: number
}
let tom: Person = {
    name:"tom",
    age: 22,
}
//上面的例子中，我们定义了一个接口 Person，接着定义了一个变量 tom，它的类型是 Person。
//这样，我们就约束了 tom 的形状必须和接口 Person 一致。
// let lucy: Person = {
//     name:"lucy",
// }  //报错
//=======定义值少会报错，定义值多了也会报错

//可选属性
interface Bird {
    name: string;
    age?: number
}
let xiaoniao: Bird = {
   name:'xiaoniao'
}
//这时仍然不允许添加未定义的属性：

//任意属性
interface Pander{
    name: string;
    [propName:string]: any
}
let xiongmao: Pander={
    name:"大熊猫",
    weight:200,
}
//允许任意类型

//只读属性
interface Onlyread{
    readonly id: number;
    [propName :string] : any;
}
let userInfo: Onlyread = {
    id:100,
    name:"李四"
}
//userInfo.id = 200报错

//数组类型
//「类型 + 方括号」表示法
let fibonacci: number [] = [1,2,3,4,5];
// 报错let fibonaccis: number [] = [1,2,3,"4"]
// 报错 fibonacci.push("1")
//  数组泛型
let fanarr : Array<number> = [1,2,3,4,5];
// 范型的概念 使用的时候在规定类型
//  any在数组中的运用
let anylist : any[] = [1,"2",{name:"你好"}];
//  类数组 类似数组的arguments;
function sum() {
    let args: IArguments = arguments;
}

